// 1.函数的定义 可以指定参数的类型和返回值的类型
// function fn(name:string):void{
//     return undefined
// }
// fn('ikki')

// 2.函数表达式
// type GetName = (firstName:string,lastName:string)=>string;
// let getName: GetName = function (firstName: string, lastName: string): string{
//     return firstName+lastName;
// }

// 3.没有返回值
// let hello2 = function (name:string):void {
//     console.log('hello2',name);
//     return undefined;
// }
// hello2('ikki');

// 4.可选参数
// function print(name:string,age?:number):void {
//     console.log(name,age);
// }
// print('zfpx');

// 5.默认参数
function ajax(url:string,method:string='GET') {
    console.log(url,method);
}
ajax('/users');

// 6.剩余参数
// function sum(...numbers:number[]) {
//     return numbers.reduce((val,item)=>val+=item,0);
// }
// console.log(sum(1,2,3));

// 7.函数重载 表现为给同一个函数提供多个函数类型定义
// let obj: any={};
// function attr(val: string): void;
// function attr(val: number): void;
// function attr(val:any):void {
//     if (typeof val === 'string') {
//         obj.name=val;
//     } else {
//         obj.age=val;
//     }
// }
// attr('zfpx');
// attr(9);
// attr(true);
// console.log(obj);






